#include "supernetwork.h"

SuperNetwork::SuperNetwork()
{
    ip="127.0.0.1"; //TODO 设置ip，这里应该需要从配置文件等读取
    port=0;
    socket=NULL;
}

QJsonObject SuperNetwork::sendReq(QJsonObject envelope)
{
    if(port==0) //如果没有指定端口
    {
        QJsonObject except;
        except.insert("code","-1");
        except.insert("message","用户未指定服务端口");
        return except;
    }
    socket->connectToHost(ip,port); //连接到服务器
    //将envelope转换为string
    QJsonDocument document;
    document.setObject(envelope);
    QByteArray byteArray = document.toJson(QJsonDocument::Compact);
    QString strEnvelope(byteArray);
    //将string处理成可以发送的形式
    char sendMsgChar[strEnvelope.length()+10]={0};
    strcpy(sendMsgChar,strEnvelope.toStdString().c_str());
    strcat(sendMsgChar,"\r\n");               //这里真是*了狗了，不加换行不算结束,无法得到哦回复emmm
    socket->write(sendMsgChar,strlen(sendMsgChar));  //发送信息
    QString res="";
    if(socket->waitForReadyRead(3000))  //从服务器端读到回复
    {
        res=QString(socket->readAll());
    }
    else    //如果没有收到回复
    {
        QJsonObject except;
        except.insert("code","-2");
        except.insert("message","无法获取到服务器的回复");
        return except;
    }
    socket->disconnect();    //关闭连接

    //将回复转换为json对象
    QJsonParseError json_error;
    document=QJsonDocument::fromJson(res.toStdString().c_str(),&json_error);    //获取文档
    if(json_error.error!=QJsonParseError::NoError)  //如果出错
    {
        QJsonObject except;
        except.insert("code","-3");
        except.insert("message","服务器返回值格式错误");
        return except;
    }
    envelope=document.object(); //获取回复的信封
    return envelope;    //返回信封
}
